#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>

int main()
{
  //用c接口进行文件写入操作时，会先将内容写入c语言的缓冲区
  //这样做的意义是：1.惰性刷新能够很好的提高效率 2. 解决格式话输入输出问题
  //并且，对于对于刷新缓冲区的方式有三种，分别是：
  //1. 无缓冲 （写入后直接进行fflush）
  //2. 行缓冲 （对显示屏写入默认是行缓冲，因为对于显示器文件基本都是一行一行看的
  //3. 全缓冲 （对于写入普通文件，默认是全缓冲）
  const char* str1 = "hello fwrite\n";
  const char* str2 = "hello write!\n";
  printf("hello printf!\n");
  fprintf(stdout, "hello fprintf!\n");
  fwrite(str1,strlen(str1), 1, stdout);
  //由于系统调用直接写入系统缓冲区，因此不受限制
  write(1, str2, strlen(str2));
  //close(1);
  fork();
  //下面的代码由于在正常情况下会进行行缓冲，所以只会打印四行
  //但是如果进行重定向写入普通文件，由于使用的是全缓冲，所以不会刷新缓冲区
  //创建子进程之后，由于父子进程对代码和数据采用写时拷贝的方法共享，所以缓冲区中的内容会被拷贝两份
  //因此就会出现文件中有七行数据的情况
  return 0;
}
